package exame_05_06_2012;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.TreeMap;

// 4
public class Empresa {
	private String nomeEmpresa;
	private TreeMap<String, Veiculo> veiculos;

	public Empresa(String string) {
		this.veiculos = new TreeMap<String, Veiculo>();
	}

	public TreeMap<String, Veiculo> getVeiculos() {
		return veiculos;
	}

	public void setVeiculos(TreeMap<String, Veiculo> veiculos) {
		this.veiculos = veiculos;
	}

	// 4, d
	public boolean existeServicoComDistanciaMaiorQue(double dist) {
		boolean existe = false;
		Iterator<Veiculo> itVeic = this.veiculos.values().iterator();

		while (existe == false && itVeic.hasNext()) {

			Iterator<Contratavel> ctIt = itVeic.next().getServicosContratados()
					.iterator();

			while (existe == false && ctIt.hasNext()) {
				Contratavel contratavel = ctIt.next();
				if (contratavel.getDistancia() > dist) {
					existe = true;
				}

			}

		}

		return existe;
	}

	public String getNomeEmpresa() {
		return this.nomeEmpresa;
	}

	public void setNomeEmpresa(String nomeEmpresa) {
		this.nomeEmpresa = nomeEmpresa;
	}

	// 4,a
	public double valorTodosContratos() {
		double valor = 0;

		for (Veiculo v : this.veiculos.values()) {
			for (Contratavel ct : v.getServicosContratados()) {
				valor += v.custoPorContrato(ct);
			}
		}

		return valor;
	}

	// 4, c
	public String veiculoComMaisKms() {
		String mat = "";
		double maxKms = 0;

		for (Veiculo v : this.veiculos.values()) {
			int kmsVeic = 0;

			for (Contratavel ct : v.getServicosContratados()) {
				kmsVeic += ct.getDistancia();
			}

			if (kmsVeic > maxKms) {
				maxKms = kmsVeic;
				mat = v.getMatricula();
			}
		}

		return mat;
	}

	// 4, b
	public Map<String, ArrayList<Veiculo>> veiculosPorCliente() {
		Map<String, ArrayList<Veiculo>> tabela = new HashMap<String, ArrayList<Veiculo>>();

		for (Veiculo v : this.veiculos.values()) {
			for (Contratavel ct : v.getServicosContratados()) {
				String nomeCliente = ct.getCliente();

				ArrayList<Veiculo> lVeic = null;

				if (tabela.containsKey(nomeCliente)) {
					lVeic = tabela.get(nomeCliente);
					if (lVeic.contains(v) == false) {
						lVeic.add(v);
					}
				} else {
					lVeic = new ArrayList<Veiculo>();
					lVeic.add(v);
					tabela.put(nomeCliente, lVeic);
				}
			}
		}

		return tabela;
	}

}
